using System;

namespace ArticleManagementSystem.Api.Params
{
    public class TimeStamp
    {
        // /// <summary>
        // /// 取时间戳，高并发情况下会有重复。想要解决这问题请使用sleep线程睡眠1毫秒。
        // /// </summary>
        // /// <param name="AccurateToMilliseconds">精确到毫秒</param>
        // /// <returns>返回一个长整数时间戳</returns>
        // public static long GetTimeStamp(DateTime time, bool AccurateToMilliseconds = false)
        // {
        //     if (AccurateToMilliseconds)
        //     {

        //         // 使用当前时间计时周期数（636662920472315179）减去1970年01月01日计时周期数（621355968000000000）除去（删掉）后面4位计数（后四位计时单位小于毫秒，快到不要不要）再取整（去小数点）。

        //         //备注：DateTime.Now.ToUniversalTime不能缩写成DateTime.Now.Ticks，会有好几个小时的误差。

        //         //621355968000000000计算方法 long ticks = (new DateTime(1970, 1, 1, 8, 0, 0)).ToUniversalTime().Ticks;

        //         return (time.ToUniversalTime().Ticks - 621355968000000000) / 10000;

        //     }
        //     else
        //     {

        //         //上面是精确到毫秒，需要在最后除去（10000），这里只精确到秒，只要在10000后面加三个0即可（1秒等于1000毫米）。
        //         return (time.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
        //     }
        // }

        // /// <summary>
        // /// 时间戳反转为时间，有很多中翻转方法，但是，请不要使用过字符串（string）进行操作，大家都知道字符串会很慢！
        // /// </summary>
        // /// <param name="TimeStamp">时间戳</param>
        // /// <param name="AccurateToMilliseconds">是否精确到毫秒</param>
        // /// <returns>返回一个日期时间</returns>
        // public static DateTime GetTime(long TimeStamp, bool AccurateToMilliseconds = false)
        // {
        //     System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
        //     if (AccurateToMilliseconds)
        //     {
        //         return startTime.AddTicks(TimeStamp * 10000);
        //     }
        //     else
        //     {
        //         return startTime.AddTicks(TimeStamp * 10000000);
        //     }
        // }


        public static dynamic Datechange(DateTime startTime, DateTime endTime)
        {
            dynamic dateDiff = null;
            try
            {
                TimeSpan ts1 = new TimeSpan(startTime.Ticks);
                TimeSpan ts2 = new TimeSpan(endTime.Ticks);
                TimeSpan ts = ts1.Subtract(ts2).Duration();
                dateDiff = new {
                    Day=ts.Days,
                    hours = ts.Hours,
                    minutes = ts.Minutes,
                    seconds = ts.Seconds
                };
                
            }
            catch
            {

            }
            return dateDiff;
        }


    }
}